
#include <iostream>
#include <math.h>
#include <stdio.h>
#define MAXQSIZE 100
using namespace std;

struct BiNode {
  int data;
  BiNode *lchild, *rchild;
};

struct SqQueue {
  BiNode *base[100];
  int front, rear;
};

void CreateBiTree(BiNode *&T) {

  char ch;
  cin >> ch;
  if (ch == '#')
    T = NULL;
  else {
    T = new BiNode;
    T->data = ch;
    CreateBiTree(T->lchild);
    CreateBiTree(T->rchild);
  }
}


// int Depth(BiNode *Tree)
// {
//     int left, right;
//     if (Tree == NULL)    //递归出口
//         return 0;
//     else
//     {
//         left = Depth(Tree->lchild);    //递归
//         right = Depth(Tree->rchild);
//         return left > right ? (left+1) : (right+1);   //返回较深的一棵子树
//     }
// }
//
int Depth(BiNode *Tree)
{
    if(Tree == NULL){
      return 0;
    }else {
      int l = Depth(Tree->lchild);
      int r = Depth(Tree->rchild);
      return max(l+1,r+1);
    }

}

int main() {

  BiNode *Tree;
  CreateBiTree(Tree);
  cout<<Depth(Tree)<<endl;
  return 0;
}
